package code15.f;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;

public class TestFileOperation {

	public static void main(String[] args) {
		//f1();
		//f2();
		//f3();
		//f4();
		f5();
	}

	private static void f5() {
		File f = new File("src");
		// 获取当前目录下的 所有子文件的 名称
		String[] list = f.list();
//		for (String fileName : list) {
//			System.out.println(fileName);
//		}
		System.out.println("----------");
		// 获取当前目录下的 所有子文件的 File对象
		File[] listFiles = f.listFiles();
//		for (File file : listFiles) {
//			System.out.println(file.getAbsolutePath());
//		}
		System.out.println("-----------");
		// 筛选/过滤
		String[] list2 = f.list(new FilenameFilter() {
			// 返回 true 表示留下, 返回 false 表示过滤、不留下
			@Override
			public boolean accept(File dir, String name) {
				// 参数 dir 当前文件所在目录, name 当前文件名
				// 保留 properties 文件
				return name.endsWith(".properties");
			}
		});
//		for (String fileName : list2) {
//			System.out.println(fileName);
//		}
		
		File[] listFiles2 = f.listFiles(new FileFilter() {
			// 返回 true 表示留下, 返回 false 表示过滤、不留下
			@Override
			public boolean accept(File f) {
				// 参数 f 是当前文件对象
				// 保留 properties 文件
				return f.isFile() ? 
						f.getName().endsWith(".properties")
						: false;
			}
		});
		for (File file : listFiles2) {
			System.out.println(file.getAbsolutePath());
		}
	}

	private static void f4() {
		// 创建目录, 成功返回true
		File f = new File("abc");
		boolean mkdir = f.mkdir();
		System.out.println("mkdir:"+mkdir);
		
		File f2 = new File("abc/qw/xyz");
		// 父目录如果不存在，则创建失败
		boolean mkdir2 = f2.mkdir();
		System.out.println("mkdir2:"+mkdir2);
		
		// 级联创建目录, 即路径中所有不存在的目录会被自动的依次创建
		boolean mkdirs = f2.mkdirs();
		System.out.println("mkdirs:"+mkdirs);
	}

	private static void f3() {
		// 删除File, 成功返回true
		File f = new File("aaa.txt");
		// 删除目录时，目录必须是空的
		System.out.println("delete:"+f.delete());
	}

	private static void f2() {
		// 重命名(也可以用于移动文件), 成功返回true
		File f = new File("src/a.txt");
		// 参数新的File对象, 只改名称, 则所在目录不能修改； 如果移动，则可以修改目录
		File f2 = new File(f.getParentFile(), "aaa.txt");
		boolean renameTo = f.renameTo(f2);// 只改名称
		System.out.println("renameTo1:"+renameTo);
		
		// 移动
		f2 = new File("src/aaa.txt");
		// src的上一级目录
		File parentFile = f2.getParentFile().getParentFile();
		boolean renameTo2 = f2.renameTo(new File(parentFile, f2.getName()));
		System.out.println("renameTo2:"+renameTo2);
	}

	private static void f1() {
		File f = new File("src/a.txt");
		// 创建一个空的(普通)文件, 成功返回 true
		try {
			// 文件所在目录必须真实存在
			boolean flag = f.createNewFile();
			System.out.println("createNewFile:"+flag);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	
}
